package com.youdianda.controller;

import com.youdianda.constant.MessageConstant;
import com.youdianda.result.Result;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.util.FileCopyUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

//@RestController
//@RequestMapping("/common")
@Slf4j
public class UploadController {


        @Value(value = "${upload.path}")
        private String uploadPath;

        /**
         * 上传图片并预览
         */
        @PostMapping("/upload")
        public Result uploadImage(@RequestParam(value = "file") MultipartFile multipartFile) {
            try {
                if (multipartFile.isEmpty()) {
                    return Result.error(MessageConstant.UNKNOWN_ERROR);
                }

                // 上传的图片全部保存在 "E://upload//avatar//" 目录下
                File file = new File(uploadPath);
                if (!file.exists()) {
                    // 创建完整的目录
                    file.mkdirs();
                }

                // 获取文件原始名(包含后缀名)
                String orgName = multipartFile.getOriginalFilename();
                // 获取文件名（不包括后缀）
                String prefixName = orgName.substring(0, orgName.lastIndexOf("."));
                // 获取文件后缀名
                String suffixName = orgName.substring(orgName.lastIndexOf("."));
                // 这是处理后的新文件名
                String fileName;

                //获取文件大小
                long size = multipartFile.getSize();
                String s = String.valueOf(size);

                if(orgName.contains(".")) {
                    // 示例：avatar.123.png，经过处理后得到：avatar.123_1661136943533.png
                    fileName = prefixName + "_" + System.currentTimeMillis() + suffixName;
                } else {
                    // 上传的图片没有后缀（这压根就不算是一个正常的图片吧？）
                    return Result.error(MessageConstant.UNKNOWN_ERROR);
                }

                String savePath = file.getPath() + File.separator + fileName;
                File saveFile = new File(savePath);
                // 将上传的文件复制到指定目录
                FileCopyUtils.copy(multipartFile.getBytes(), saveFile);

                // 返回给前端的图片保存路径；前台可以根据返回的路径拼接完整地址，即可在浏览器上预览该图片
                String path = "upload/avatar" + File.separator + fileName;
                if (path.contains("\\")) {
                    path = path.replace("\\", "/");
                }

                //创建新的map集合
                Map<String,String> map = new HashMap<>();
                map.put("mime",suffixName);
                map.put("name",orgName);
                map.put("savePath",path);
                map.put("size",s);
                return Result.success(map);

            } catch (IOException e) {
                log.error(e.getMessage(), e);
            }
            return Result.error(MessageConstant.UPLOAD_FAILED);
        }

    }



